package com.quad.innovators.salesease.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.quad.innovators.salesease.common.result.PageResultBean;
import com.quad.innovators.salesease.model.common.Option;
import com.quad.innovators.salesease.model.dto.SysUserAuthInfo;
import com.quad.innovators.salesease.model.dto.SysUserExportDTO;
import com.quad.innovators.salesease.model.entity.SysUser;
import com.quad.innovators.salesease.model.form.SysUserForm;
import com.quad.innovators.salesease.model.query.SysUserPageQuery;
import com.quad.innovators.salesease.model.vo.SysUserInfoVO;
import com.quad.innovators.salesease.model.vo.SysUserPageVO;
import com.quad.innovators.salesease.model.vo.SysUserPasswordVO;

import java.util.List;


public interface SysUserService extends IService<SysUser> {

    /**
     * 用户分页列表
     *
     * @return 分页数据
     */
    PageResultBean<SysUserPageVO> listPagedUsers(SysUserPageQuery queryParams);


    /**
     * 获取用户表单数据
     *
     * @param userCode 用户编码
     * @return 用户数据
     */
    SysUserForm getUserFormData(String userCode);


    /**
     * 新增用户
     *
     * @param userForm 用户表单对象
     * @return 是否成功
     */
    boolean saveUser(SysUserForm userForm);

    /**
     * 修改用户
     *
     * @param userCode   用户ID
     * @param userForm 用户表单对象
     * @return 是否成功
     */
    boolean updateUser(String userCode, SysUserForm userForm);



    /**
     * 修改用户状态
     *
     * @param userCode   用户ID
     * @param status 用户状态
     * @return 是否成功
     */
    boolean updateUserStatus(String userCode, Integer status);


    /**
     * 删除用户
     *
     * @param idsStr 用户ID，多个以英文逗号(,)分割
     * @return 是否成功
     */
    boolean deleteUsers(String idsStr);


    SysUserAuthInfo getUserAuthInfo(String username);

    /**
     * 获取导出用户列表
     *
     * @param queryParams 查询参数
     * @return 用户
     */
    List<SysUserExportDTO> listExportUsers(SysUserPageQuery queryParams);


    /**
     * 获取登录用户信息
     *
     * @return 用户信息
     */
    SysUserInfoVO getCurrentUserInfo();


    /**
     * 查询密码
     * @param userCode 用户id
     * @return 密码
     */
    SysUserPasswordVO getUserPassword(String userCode);

    /**
     * 重置用户密码
     *
     * @param userCode   用户ID
     * @param password 重置后的密码
     * @return 是否成功
     */
    boolean resetPassword(String userCode, String password);


    /**
     * 用户下拉列表
     * @return 用户下拉列表
     */
    List<Option<String>> listRoleOptions();
}
